package Strategy;

import Factory.AgriculturalMachine;
import Factory.MachineType;
import Observer.EnvironmentData;

// 湿度异常时的作业策略（过高或过低）
public class MoistureStrategy implements OperationStrategy {
    private static final double HIGH_MOISTURE_THRESHOLD = 0.8;  // 高湿度阈值
    private static final double LOW_MOISTURE_THRESHOLD = 0.3;   // 低湿度阈值

    @Override
    public void adjust(AgriculturalMachine machine, EnvironmentData data) {
        double moisture = data.getSoilMoisture();

        if (moisture > HIGH_MOISTURE_THRESHOLD) {
            handleHighMoisture(machine, moisture);
        } else if (moisture < LOW_MOISTURE_THRESHOLD) {
            handleLowMoisture(machine, moisture);
        } else {
            // 湿度正常，使用标准策略
            System.out.println(machine.getType() + " 湿度正常（" + moisture + "），使用标准作业策略");
        }
    }

    private void handleHighMoisture(AgriculturalMachine machine, double moisture) {
        switch (machine.getType()) {
            case SEEDER:
                System.out.println(machine.getType() + " 检测到高湿度（" + moisture + "），已调整播种策略");
                // 具体逻辑：推迟播种或调整播种深度
                break;
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到高湿度（" + moisture + "），已降低喷洒速率");
                // 具体逻辑：降低喷洒速率，避免过度湿润
                break;
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到高湿度（" + moisture + "），已调整收割策略");
                // 具体逻辑：可能需要调整收割速度或等待湿度降低
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到高湿度（" + moisture + "），已调整行进速度");
                // 具体逻辑：降低行进速度，防止打滑
                break;
        }
    }

    private void handleLowMoisture(AgriculturalMachine machine, double moisture) {
        switch (machine.getType()) {
            case SEEDER:
                System.out.println(machine.getType() + " 检测到低湿度（" + moisture + "），已调整播种策略");
                // 具体逻辑：可能需要增加播种深度或调整种子类型
                break;
            case SPRAYER:
                System.out.println(machine.getType() + " 检测到低湿度（" + moisture + "），已增加喷洒量");
                // 具体逻辑：增加喷洒量，提供更多水分
                break;
            case HARVESTER:
                System.out.println(machine.getType() + " 检测到低湿度（" + moisture + "），已加强除尘措施");
                // 具体逻辑：低湿度可能导致尘土飞扬，需要加强除尘
                break;
            case TRACTOR:
                System.out.println(machine.getType() + " 检测到低湿度（" + moisture + "），已调整行进策略");
                // 具体逻辑：可能需要调整轮胎压力或行进路线
                break;
        }
    }
}
